package com.cloudy.impl;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import static com.cloudy.utility.CloudyUtility.*;

public class S3ObjectFile extends S3Object{
	
	private String contentType = "";
	private File file;
	
	public S3ObjectFile(String fileName) {
		file = new File(fileName);
	}

	public String getContentType() {
	
		return this.contentType;
	}

	public void setContentType(String contentType) {
		this.contentType = contentType;
	}

	public long getContentLength() {
		return file.length();
	}

	public void writeContentToOutPutStream(OutputStream outputStream)
			throws IOException {
		transferBytesFromIn2Out(new FileInputStream(file), outputStream);
	}
	
	public byte[] getContentAsBytes() throws IOException{
		InputStream is = new FileInputStream(file);
    
        long length = file.length();
        if (length > Integer.MAX_VALUE) {
            throw new IOException("File is too large");
        }
    
        // Create the byte array to hold the data
        byte[] bytes = new byte[(int)length];
    
        // Read in the bytes
        int offset = 0;
        int numRead = 0;
        while (offset < bytes.length
               && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
            offset += numRead;
        }
    
        // Ensure all the bytes have been read in
        if (offset < bytes.length) {
            throw new IOException("Could not completely read file "+file.getName());
        }
    
        // Close the input stream and return bytes
        is.close();
        return bytes;
    }

}
